<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="hero-widgets flex_between c-fff">
            <div class="tool-item shou flex_center" @click="changeTab(0)">
              <img src="/static/images/video.svg" alt="savinginsta video" />
              <span class="f-16">Video</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(1)">
              <img src="/static/images/Photo.svg" alt="savinginsta photo" />
              <span class="f-16">Photo</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(2)">
              <img src="/static/images/Reels.svg" alt="savinginsta reels" />
              <span class="f-16">Reels</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(3)">
              <img src="/static/images/Story.svg" alt="savinginsta story" />
              <span class="f-16">Story</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(4)">
              <img src="/static/images/Igtv.svg" alt="savinginsta IGTV" />
              <span class="f-16">IGTV</span>
            </div>
          </div>
          <div class="banner-heading flex_ccenter">
            <div class="heading-item" v-show="current == 0">
              <h1 class="title fw700 f-42 c-fff">
                Tải xuống video trên Instagram
              </h1>
              <h2 class="sub c-fff f-18 fw400">
                Tải xuống Video, Ảnh, Câu chuyện, Câu chuyện và IGTV trên
                Instagram Nội dung trực tuyến
              </h2>
            </div>
            <div class="heading-item" v-show="current == 1">
              <nuxt-link to="/vn/instagram-photo-download">
                <div @click="goToTop('Photo')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Trình tải ảnh Instagram
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Nhập URL ẢNH Instagram bên dưới
              </p>
            </div>
            <div class="heading-item" v-show="current == 2">
              <nuxt-link to="/vn/instagram-reels-video-download">
                <div @click="goToTop('reels')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Tải xuống Instagram Reels
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Nhập URL Câu chuyện Instagram bên dưới
              </p>
            </div>
            <div class="heading-item" v-show="current == 3">
              <nuxt-link to="/vn/instagram-story-download">
                <div @click="goToTop('story')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Tải xuống câu chuyện trên Instagram
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Nhập URL Instagram Stories bên dưới
              </p>
            </div>
            <div class="heading-item" v-show="current == 4">
              <nuxt-link to="/vn/igtv-downloader">
                <div @click="goToTop('igtv')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Tải xuống video IGTV
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                Nhập URL Instagram IGTV bên dưới
              </p>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                type="text"
                class="input f-18"
                v-model="input"
                @input="handleInput"
                @paste="handleInput"
                placeholder="Paste URL Instagram"
                list="fruits"
                name="fruit"
              />
              <datalist id="fruits">
                <option value="Apple"></option>
                <option value="Banana"></option>
                <option value="Cherry"></option>
              </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>Đang lấy dữ liệu, vui lòng chờ vài giây!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Trang web không thể xử lý liên kết của bạn vì nó là riêng tư
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              Dữ liệu bạn nhập không phải là một liên kết. Vui lòng nhập một
              liên kết hợp lệ, vì ví dụ:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="title-box">
            <h3 class="title f-36 c-000 italic">
              Tất cả các tính năng của Savinginsta.Com
            </h3>
            <p class="sub f-16 c-ccc">
              Savinginsta tương thích với tất cả các loại video trên Instagram
              và liên kết hình ảnh.
            </p>
          </div>
          <div class="list-tools-pc">
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/vn">
                  <div @click="goToTop('video')" class="tItem">
                    <h4>Trình tải xuống video trên Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  Savinginsta được thiết kế để cho phép bạn tải xuống ứng dụng
                  của riêng mình nội dung từ Instagram. Nó cung cấp hỗ trợ để
                  tải xuống cả hai từng video và nhiều video từ Insta.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  src="/static/images/instagram-video-downloader.webp"
                  alt="Instagram video downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  src="/static/images/instagram-video-downloader-app.webp"
                  alt="Instagram video downloader"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/vn/instagram-photo-download">
                  <div @click="goToTop('Photo')" class="tItem">
                    <h4>Trình tải xuống ảnh Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  Trình tải ảnh Instagram của Savinginsta khiến việc này trở nên
                  dễ dàng để lưu bất kỳ một hoặc nhiều ảnh nào, bao gồm cả ảnh
                  ghép, từ Instagram. Với công cụ này, tải xuống từng bài đăng
                  hình ảnh hoặc bộ sưu tập ảnh Instagram rất đơn giản và đơn
                  giản.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader.webp"
                  alt="Instagram photo downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader-app.webp"
                  alt="Instagram photo downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/vn/instagram-reels-video-download">
                  <div @click="goToTop('reels')" class="tItem">
                    <h4>Tải xuống Instagram Reels</h4>
                  </div>
                </nuxt-link>
                <p>
                  Instagram Reels Downloader của Savinginsta cho phép bạn dễ
                  dàng tải xuống video Reels từ các bài đăng trên Instagram về
                  thiết bị của bạn, cung cấp giải pháp đơn giản trong đó
                  Instagram bản thân nó không cung cấp hỗ trợ cho chức năng này.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels.webp"
                  alt="Download Instagram Reels"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels-app.webp"
                  alt="Download Instagram Reels"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/vn/igtv-downloader">
                  <div @click="goToTop('igtv')" class="tItem">
                    <h4>Trình tải xuống IGTV</h4>
                  </div>
                </nuxt-link>
                <p>
                  Câu chuyện trên Instagram cung cấp một nền tảng đặc biệt để
                  người dùng chia sẻ kinh nghiệm hàng ngày của họ thông qua hình
                  ảnh và video với lượng khán giả rộng rãi. Đôi khi, bạn có thể
                  muốn lưu một mục yêu thích story, nhưng chức năng này không có
                  trong ứng dụng. Savinginsta giải quyết vấn đề này bằng cách
                  cung cấp giải pháp cho phép người dùng dễ dàng tải xuống và
                  xem các câu chuyện trên Instagram ngoại tuyến, đảm bảo nội
                  dung đáng nhớ không bao giờ bị mất.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader.webp"
                  alt="IGTV downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader-app.webp"
                  alt="IGTV downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/vn/instagram-story-download">
                  <div @click="goToTop('story')" class="tItem">
                    <h4>Trình xem câu chuyện trên Instagram</h4>
                  </div>
                </nuxt-link>
                <p>
                  IGTV cung cấp các video có thời lượng dài và nếu bạn không thể
                  xem chúng ngay lập tức, bạn có tùy chọn tải xuống những thứ
                  này Video IGTV vào PC của bạn. Điều này cho phép bạn thuận
                  tiện xem lại và thưởng thức chúng sau này, ngay cả khi không
                  có internet kết nối và loại bỏ những lo ngại về nội dung IGTV
                  bị xóa hoặc không có sẵn.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download.webp"
                  alt="Instagram Story Download"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download-app.webp"
                  alt="Instagram Story Download"
                />
              </div>
            </div>
          </div>
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                Tải xuống bằng ứng dụng Insta Downloader
              </h3>
              <p class="f-16 c-ccc">
                Ứng dụng của chúng tôi cung cấp giải pháp tải xuống nhanh chóng và đơn giản
                 Video Instagram, cung cấp video chất lượng HD mà không cần
                 hình mờ.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              SAVINGINSTA - TẢI XUỐNG INSTAGRAM CÔNG CỤ TỐT NHẤT
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta nổi bật là trình tải xuống Instagram hàng đầu,
               được chế tạo một cách chuyên nghiệp để nhanh chóng tải xuống nội dung chất lượng cao từ
               Instagram. Khi tìm kiếm phương pháp tải xuống hiệu quả nhất
               Phương tiện truyền thông Instagram, trình tải xuống Savinginsta nổi lên như một ứng dụng hàng đầu
               giải pháp của bên thứ ba.
            </p>
            <p class="f-16 c-ccc">
              Instagram, nổi tiếng là ứng dụng chia sẻ ảnh phổ biến nhất thế giới,
               chứng kiến việc tải lên hàng triệu bức ảnh hàng ngày. Đối với như vậy
               khoảnh khắc, sự cần thiết của trình tải xuống video Instagram trở nên
               hiển nhiên, cung cấp một giải pháp liền mạch cho nhu cầu trước mắt của bạn.
               Công cụ này rất cần thiết cho bất kỳ ai muốn bảo vệ
               nội dung Instagram yêu thích một cách hiệu quả.
            </p>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Các tính năng của Trình tải xuống video Instagram của Savinginsta:
            </h3>
            <div class="attributes-list flex_between">
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Tải xuống video trên Instagram Nhanh chóng, dễ dàng và an toàn.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Bạn có thể đăng xuất khỏi tài khoản Instagram của mình.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Chỉ với một cú nhấp chuột, bạn có thể tải xuống hình ảnh Instagram
                   và video.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Tải xuống và lưu hình ảnh và video ở mức cao ban đầu
                   định nghĩa và chất lượng.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Từ tài khoản cá nhân, tải xuống và lưu video Instagram.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  Tốc độ cao: Tính đến thời điểm hiện tại, Savinginsta cung cấp tốc độ nhanh nhất
                   tốc độ tải xuống.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Cách sử dụng Savinginsta Instagram Downloader để lưu từ IG
              </h3>
              <div class="note c-ccc f-16">
                Lưu ý: Đảm bảo rằng video hoặc ảnh Instagram bạn muốn
                 tải xuống là từ một tài khoản công cộng.
              </div>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Bước01:</span>
                  <span class="f-16 c-000"
                    >Sao chép URL của Ảnh và Video trên Instagram</span
                  >
                </div>
                <div class="app-step">
                  <div class="fw700 c-000 f-16">Trên ứng dụng Instagram:</div>
                  <div class="c-000 f-16">
                    Đối với iOS: Nhấn để lấy URL ảnh Instagram.
                  </div>
                  <div class="c-000 f-16">
                    Đối với Android: Nhấp vào phía trên bài đăng và chọn 'Sao chép
                     URL Instagram', sau đó nhấn 'Sao chép URL chia sẻ'. Liên kết sẽ được
                     đã sao chép vào clipboard của bạn.
                  </div>
                  <div class="fw700 c-000 f-16">- Trên PC/Mac:</div>
                  <div class="c-000 f-16">
                    Nhấp chuột phải vào ngày của video hoặc ảnh trên Instagram và
                     chọn "Sao chép địa chỉ liên kết" để tải xuống nội dung Instagram trên
                     máy tính để bàn của bạn.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Bước02:</span>
                  <span class="f-16 c-000">
                    Dán URL vào Savinginsta.App</span
                  >
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    Điều hướng đến Savinginsta.App - Instagram chuyên dụng
                     downloader.
                  </div>
                  <div class="c-000 f-16">
                    Sao chép và dán URL đã sao chép vào trường văn bản nhất định.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">Bước03:</span>
                  <span class="f-16 c-000">Bắt đầu tải xuống</span>
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    Nhấp vào nút "Tải xuống" để bắt đầu video trên Instagram hoặc
                     quá trình tải ảnh xuống.
                  </div>
                  <div class="fw700 c-000 f-16">
                    Thông tin sử dụng quan trọng
                  </div>
                  <div class="c-000 f-16">
                    Savinginsta được thiết kế chủ yếu để tải video và
                     hình ảnh từ tài khoản Instagram của riêng bạn.
                  </div>
                  <div class="c-000 f-16">
                    Chúng tôi ưu tiên quyền riêng tư của người dùng và có quyền từ chối
                     dịch vụ nếu công cụ của chúng tôi được sử dụng để xâm phạm quyền lợi của người khác
                     quyền riêng tư hoặc truy cập tài liệu trái phép.
                  </div>
                </div>
              </div>
            </div>
            <div class="user-note f-16">
              <div class="app-tip"></div>
              Để hiểu biết toàn diện về chính sách của chúng tôi

              <a class="fw700 c-blue" href="/terms-of-service">
                vui lòng đọc Điều khoản dịch vụ đầy đủ của chúng tôi tại đây.</a
              >
            </div>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">Công cụ</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li @click="goToTools('story')">
                    <nuxt-link to="/vn/instagram-story-download"
                      >Trình tải xuống câu chuyện trên Instagram</nuxt-link
                    >
                  </li>
                  <li @click="goToTools('reels')">
                    <nuxt-link to="/vn/instagram-reels-video-download"
                      >Trình tải xuống Instagram Reels</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >Trình tải xuống Tiktok</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Ủng hộ</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> Liên hệ </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">Hợp pháp</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      Điều khoản dịch vụ
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> Chính sách bảo mật </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >Chúng tôi không liên kết với Instagram hoặc Meta</b
            >
            <div class="c-ccc f-16">
              © {{new Date().getFullYear()}} Insta Downloader All rights reserved.
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";

export default {
  components: { pageHeader, SuccessContent },
  name: "IndexPage",
  head: {
    htmlAttrs: {
      lang: "vi",
    },
    bodyAttrs: {
      "data-lang": "vi",
    },
    title:
      "Instagram Downloader - Tải xuống video Instagram trực tuyến - Savinginsta",
    meta: [
      { property: "og:locale", content: "vi" },
      //Page Information
      {
        name: "description",
        content:
          "Savinginsta: Dễ dàng tải xuống video, cuộn phim và ảnh trên Instagram bằng công cụ thân thiện với người dùng của chúng tôi. Lưu video Instagram của bạn một cách nhanh chóng và an toàn trên mọi thiết bị.",
      },
      //Schema.org Microdata
      {
        itemprop: "name",
        content:
          "Instagram Downloader - Tải xuống video Instagram trực tuyến - Savinginsta",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content:
          "Instagram Downloader - Tải xuống video Instagram trực tuyến - Savinginsta",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/vn" },

      {
        property: "og:description",
        content:
          "Savinginsta: Dễ dàng tải xuống video, cuộn phim và ảnh trên Instagram bằng công cụ thân thiện với người dùng của chúng tôi. Lưu video Instagram của bạn một cách nhanh chóng và an toàn trên mọi thiết bị.",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/vn" },
      {
        name: "twitter:title",
        content:
          "Instagram Downloader - Tải xuống video Instagram trực tuyến - Savinginsta",
      },
      {
        name: "twitter:description",
        content:
          "Savinginsta: Dễ dàng tải xuống video, cuộn phim và ảnh trên Instagram bằng công cụ thân thiện với người dùng của chúng tôi. Lưu video Instagram của bạn một cách nhanh chóng và an toàn trên mọi thiết bị.",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
      {
        itemprop: "image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        property: "og:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        name: "twitter:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/vn",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/vn",
      },
    ],
    script: [
      {
        json: {
          "@context": "https://schema.org",
          "@type": "WebSite",
          name: "Instagram Downloader - Tải xuống video Instagram trực tuyến - Savinginsta",
          url: "https://savinginsta.com",
          description:
            "Savinginsta: Dễ dàng tải xuống video, cuộn phim và ảnh trên Instagram bằng công cụ thân thiện với người dùng của chúng tôi. Lưu video Instagram của bạn một cách nhanh chóng và an toàn trên mọi thiết bị.",
          publisher: {
            "@type": "Organization",
            name: "Savinginsta",
            logo: {
              "@type": "ImageObject",
              url: "https://savinginsta.com/static/images/logo.webp",
            },
          },
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `Trình tải xuống video trên Instagram là gì?`,
          content: `Trình tải xuống video trên Instagram là một công cụ dựa trên web được thiết kế để lưu ảnh, video và nội dung IGTV trên Instagram để sử dụng sau này. Savinginsta nổi bật là lựa chọn hàng đầu để tải xuống nội dung từ Instagram một cách dễ dàng.`,
        },
        {
          title: `Đăng nhập vào tài khoản Instagram của tôi có cần thiết để sử dụng Savinginsta không?`,
          content: `Không, không cần phải đăng nhập vào tài khoản Instagram của bạn. Savinginsta đảm bảo tải xuống an toàn và ẩn danh từ Instagram mà không yêu cầu bất kỳ thông tin cá nhân nào.`,
        },
        {
          title: `Tôi có thể lưu trực tiếp video từ Instagram không?`,
          content: `Không thể tải xuống trực tiếp video từ nguồn cấp dữ liệu Instagram của bạn hoặc câu chuyện của người khác thông qua chính Instagram. Tuy nhiên, Savinginsta đưa ra một giải pháp đơn giản. Chỉ cần truy cập trang web của họ tại https:// Savinginsta.com và làm theo hướng dẫn đơn giản được cung cấp.`,
        },
        {
          title: `Dịch vụ tải xuống video và ảnh trên Instagram có miễn phí không?`,
          content: `Có, Savinginsta cung cấp dịch vụ này hoàn toàn miễn phí, không giới hạn số lượt tải xuống.`,
        },
        {
          title: `Tôi có thể tải xuống nội dung từ tài khoản Instagram riêng tư không?`,
          content: `Thật vậy, Savinginsta cho phép bạn tải xuống video, câu chuyện và ảnh từ tài khoản Instagram riêng tư. Hướng dẫn chi tiết có sẵn trên nền tảng của họ.`,
        },
        {
          title: `Có thể lưu câu chuyện trên Instagram không?`,
          content: `Tuyệt đối. Với Savinginsta, bạn có thể xem và tải xuống bất kỳ câu chuyện Instagram nào. Chỉ cần nhấp vào ba dấu chấm (⁝) trong câu chuyện, sao chép liên kết và dán vào Savinginsta để bắt đầu tải xuống.`,
        },
        {
          title: `Savinginsta có hỗ trợ tải xuống trên máy tính không?`,
          content: `Có, Savinginsta hoàn toàn tương thích với PC, cho phép bạn tải video, ảnh, câu chuyện trên Instagram, v.v. trực tiếp xuống máy tính của mình.`,
        },
        {
          title: `Tôi có thể sử dụng Savinginsta để tải xuống từ Instagram trên thiết bị Android không?`,
          content: `Chắc chắn. Đối với người dùng Android, chỉ cần sao chép liên kết bài đăng trên Instagram, dán vào Savinginsta và lưu lại. Để biết thêm chi tiết, hãy truy cập hướng dẫn tải xuống từ Instagram trên Android của họ.`,
        },
        {
          title: `Làm cách nào tôi có thể tải xuống video và ảnh trên Instagram trên iPhone/iPad (iOS)?`,
          content: `Savinginsta đã tạo ra hướng dẫn từng bước thân thiện với người dùng để tải nhiều loại video khác nhau xuống iPhone hoặc iPad của bạn. Hãy theo liên kết sau để được hướng dẫn: Tải xuống Video Instagram trên iPhone.`,
        },
        {
          title: `Điều gì sẽ xảy ra nếu video trên Instagram phát thay vì tải xuống?`,
          content: `Để giải quyết vấn đề này, hãy nhấp chuột phải vào video và chọn 'Save As...' để chọn vị trí lưu mong muốn của bạn, thay vì nhấp chuột trái.`,
        },
        {
          title: `Video được lưu trữ ở đâu sau khi tải xuống?`,
          content: `Các video đã tải xuống thường được lưu trữ trong thư mục 'Tải xuống' trên cả thiết bị di động Android và PC.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);

    //到达首页
    handleClick("guide_homepage_frist", {});
    handleClick("guide_homepage", {});
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "video",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "video",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "video",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "video",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "video",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "video",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },

    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "photo",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "photo",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
    goToTop(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: top,
      });
    },
    goToTools(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: tools,
      });
    },
  },
};
</script>
<style lang="scss" scoped>
@import "@/static/style/index.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
